package com.beemans.common.app

import android.content.Context
import android.util.Log
import com.beemans.common.app.bridge.callback.SharedViewModel
import com.beemans.common.app.constant.Constant
import com.beemans.common.app.data.api.Api
import com.beemans.common.utils.MmkvHelper
import com.blankj.utilcode.util.SPUtils
import com.tiamosu.fly.http.FlyHttp
import com.tiamosu.navigation.ext.lazyAppViewModel
import com.yl.lib.sentry.hook.PrivacyResultCallBack
import com.yl.lib.sentry.hook.PrivacySentry
import com.yl.lib.sentry.hook.PrivacySentryBuilder

/**
 * @author tiamosu
 * @date 2021/3/18.
 */

val sharedViewModel: SharedViewModel by lazyAppViewModel()

@Suppress("unused")
class MyApp : CommonApp() {

    override fun attachBaseContext(base: Context) {
        super.attachBaseContext(base)
        initPrivacySentry()
    }

    /**
     * 隐私合规检测初始化
     */
    private fun initPrivacySentry() {
        if (!BuildConfig.DEBUG) return
        val builder = PrivacySentryBuilder()
            // 自定义文件结果的输出名
            .configResultFileName("buyer_privacy")
            // 配置游客模式，true打开游客模式，false关闭游客模式
            .configVisitorModel(BuildConfig.DEBUG)
            // 配置写入文件日志 , 线上包这个开关不要打开！！！！，true打开文件输入，false关闭文件输入
            .enableFileResult(BuildConfig.DEBUG)
            // 持续写入文件30分钟
            .configWatchTime((30 * 60 * 1000).toLong())
            // 文件输出后的回调
            .configResultCallBack(object : PrivacyResultCallBack {
                override fun onResultCallBack(filePath: String) {}
            })
        // 添加默认结果输出，包含log输出和文件输出
        PrivacySentry.Privacy.init(this, builder)
    }

    /**
     * 初始化渠道参数
     */
    override fun initConfigurator() {
    }

    /**
     * 初始化第三方sdk
     */
    override fun initSDK(isMainProcess: Boolean) {
        super.initSDK(isMainProcess)
        if (isMainProcess) {
            initFlyHttp()
        }
    }

    /**
     * 初始化FlyHttp
     */
    private fun initFlyHttp() {
        FlyHttp.instance
            .setBaseUrl(Api.APP_DOMAIN)
            .setReadTimeOut(60 * 1000)
            .setWriteTimeOut(60 * 1000)
            .setConnectTimeout(60 * 1000)
            .setPrintEnable(true)
    }

    override fun initMmkv() {
        super.initMmkv()
        //测试 SharedPreferences 迁移
        val spUtils = SPUtils.getInstance(Constant.SP_NAME)
        spUtils.put(Constant.SP_KEY_TEST, "你好啊")
        MmkvHelper.importFromSharedPreferences(Constant.SP_NAME)
        Log.e("susu", "value:${MmkvHelper.getString(Constant.SP_KEY_TEST)}")
    }
}